Virtualization is a computing technique that improves system utilization, decoupling applications from the underlying hardware, and enhancing workload mobility and protection. One approach to virtualization is implementation of virtual machines (VMs). Another approach to virtualization is implementation of containers. The difference between a VM versus a container is primarily in the location of the virtualization layer and the way that operating system resources are used.
A VM is a portion of software that, when executed on appropriate hardware, creates an environment allowing the virtualization of a physical computer system (e.g., a server, a mainframe computer, etc.). The physical computer system is typically referred to as a “host machine,” and the operating system of the host machine is typically referred to as the “host operating system.” A virtual machine may function as a self-contained platform, executing its own “guest” operating system and software applications. Typically, software on the host machine known as a “hypervisor” (or a “virtual machine monitor”) manages the execution of one or more virtual machines, providing a variety of functions such as virtualizing and allocating resources, context switching among virtual machines, backing up the state of virtual machines periodically in order to provide disaster recovery and restoration of virtual machines, etc.
Containers are a form of operating system virtualization that encapsulates an application's code, configuration, and dependencies into building blocks that can be easily deployed. Containers allow for the execution of the application and its dependencies in resource-isolated processes (e.g., isolated user-space instances of the operating system). Containers provide for environmental consistency, operational efficiency, developer productivity, and version control. Containers further allow for applications to be deployed quickly, reliably, and consistently regardless of the deployment environment.